[toc]
DHCP的作用
一个主机如果要访问Internet,首先我们要手动配置IP地址信息,DNS服务器等网络相关配置,但如果主机的数目特别多时,显然全部手动配置并不现实,所以我们有动态主机配置DHCP
DHCP可以为局域网各个主机配置以下信息
- IP地址
- 子网掩码
- 默认网关
- DNS服务器
这样主机开机启动DHCP后就可以自动获取网络配置信息
DHCP的工作过程
假设有多个DHCP服务器和一个DHCP客户,DHCP客户服务使用的UDP端口68号,DHCP服务器使用的UDP端口号是67,封装有DHCP报文的UDP用户数据报在网络层被封装成IP数据报,然后再根据所使用的网络接口,封装成相应的数据链路帧进行发送
- DHCP客户启动时,会广播发送
DHCPDISCOVER
报文,封装该报文的IP数据报的- 源IP地址为
0.0.0.0
,因为此时DHCP客户还没有分配到IP地址 - 目的IP地址为
255.255.255.255
,因为DHCP客户不知道网络中有几个DHCP服务器 - 对于网络中的其他主机收到该IP数据报,其应用层没有监听该UDP用户数据报目的端口67的进程,所以收到后只会丢弃
- DHCPDISCOVER封装有事务ID和DHCP客户端的MAC地址
- 源IP地址为
- DHCP服务器收到
DHCPDISCOVER
报文后,根据封装的MAC地址查找自己的数据库,看是否有针对该MAC地址的配置信息,如果有用这些配置信息构建DHCPOFFER
报文,否则用默认配置信息来构建- 源IP地址为
DHCP服务器
- 目的IP地址为
255.255.255.255
,因为DHCP客户此时还没有配置IP地址 - 对于网络中的其他主机,由于应用层没有监听UDP用户数据报的目的端口68的进程,收到后只会丢弃
- DHCP客户根据
DHCPOFFER
报文中的事务ID是否和自己发送的DHCPDISCOVER
报文的事务ID相同,以此来判断是不是自己所请求的报文 - DHCPOFFER封装有事务ID,配置信息有:IP地址、子网掩码、地址租期、默认网关,DNS服务器等
- DHCP服务器从自己的IP地址池挑选IP地址时,会先用
ARP
来确保IP地址未被网络中的其他主机占用
- 源IP地址为
- DHCP客户会收到来自同一网络的所有DHCP服务器提供的
DHCPOFFER
报文,客户从中选择一个,一般来说选最先到的那一个,并向所选择的DHCP服务器发送DHCPREQUEST
报文- 源IP地址为
0.0.0.0
,因为DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器,它需要征得该服务器的同意,之后才能正式使用该DHCP服务器租用的IP地址 - 目的地址为
255.255.255.255
,这样就不用向网络中的每个DHCP服务器单播DHCPREQUEST
报文来告知它们是否请求它们作为DHCP服务器 - DHCPREQUEST报文封装有事务ID,DHCP客户端的MAC地址,接受的租约中的IP地址,提供此租约的DHCP服务器的IP地址等
- 源IP地址为
- DHCP服务器收到
DHCPREQUEST
报文后,如果服务器接受该请求,向DHCP客户发送DHCPACK
报文- 源IP地址为
DHCP服务器的IP地址
- 目的IP地址为
255.255.255.255
- 源IP地址为
- DHCP客户收到
DHCPACK
报文后,主机使用ARP
检测该IP地址是否被网络的其他主机占用,若被占用就重新发送DHCPDISCOVER
报文,否则就可以使用该IP地址和网络中的其他主机通信了 - DHCP客户在使用租用的IP地址经过0.5倍的租用期时,向DHCP服务器发送
DHCPREQUEST
报文来请求更新租用期,发送的IP数据中- 源IP地址为
当前的IP地址
- 目的IP地址为
DHCP服务器IP地址
- 源IP地址为
- DHCP服务器收到
DHCPREQUEST
报文后,如果同一租约续租,发送一个DHCPACK
报文给DHCP客户,这样客户就得到新的租期,否则发送DHCPNACK
报文拒绝请求,此时DHCP客户必须停止使用之前租用的IP地址 - 如果DHCP服务器没有反应,在经过租期的0.875倍后,DHCP客户会再发送一个
DHCPREQUEST
报文请求租期续约 - 如果租用期到期后,DHCP客户必须停止使用之前租用的IP地址,并重新发生
DHCPDISCOVER
报文来申请新的地址 - DHCP客户可以随时提前终止DHCP服务器所提供的租用期,只需要向DHCP服务器发生
DHCPRELEASE
报文即可,IP数据报中- 目的IP地址为
255.255.255.255
- 源IP地址为
0.0.0.0
- 目的IP地址为
DHCP中继代理
如果DHCP客户与所需要的DHCP服务器经由一个路由器相连,这时候DHCP客户能够自动获取到IP地址吗?
答案是不行,因为路由器不会转发一个广播报文,而是丢弃,所以我们需要给该路由器配置DHCP服务器的IP地址并使之称为DHCP中继代理,这样路由器收到广播的DHCPDISCOVER
报文后,单播转发给DHCP服务器,DHCP客户使用DHCP中继代理的主要原因是我们并不想在每个网络都设置一个DHCP服务器